from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed


# 自定义认证类
class MyAuthentication(BaseAuthentication):
    def authenticate(self, request):  # 必须重写authenticate方法
        token = request.query_params.get("token")
        if token:  # 假定存在即通过
            return "user", token

        raise AuthenticationFailed({"code": 10085, "error": "认证失败"})  # 认证不通过则返回并自定义报错

    def authenticate_header(self, request):
        return "APW"


# 多认证类校验，如果只需通过一个认证即可，可定义一个错误认证类作为多认证类的最后一个
class Authentication1(BaseAuthentication):
    def authenticate(self, request):  # 必须重写authenticate方法
        token = request.query_params.get("token")
        if token:  # 假定存在即通过
            return "user", token
        return


class NoAuthentication(BaseAuthentication):
    def authenticate(self, request):
        raise AuthenticationFailed({"code": 10086, "error": "认证失败"})  # 认证不通过则返回并自定义报错

    def authenticate_header(self, request):
        # 作用是当认证失败时，返回的响应头(认证信息)
        return "AAA"
